#include<iostream>
#include<string>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>

using namespace std;

int main()
{
    // FILE* fp=fopen("file6_12.txt","wr");
    // int pid=fork();
    // if(0==pid)
    // {
    //     int i=1;
    //     char s1[60];
    //     char s2[60]="hello, I am children process";
    //     while(i<5)
    //     {
    //         cout<<"I am children process,pid: "<<getpid()<<endl;
    //         cout<<"read: ";
    //         int tmp=0;
    //         fscanf(fp,"%s %d ",s1,&tmp);
    //         fscanf(fp,"%s",s1);
    //         cout<<s1<<endl;
    //         cout<<"write:hello, I am children process"<<i<<endl<<endl;
    //         fprintf(fp,"%s %d ",s2,i);
    //         fflush(fp);
    //         sleep(1);
    //         ++i;
    //     }
    //     return 0;
    // }

    // int i=1;
    // char s1[60];
    // char s2[60]="hello, I am father process";
    // while(i<5)
    // {
    //     cout<<"I am father process,pid: "<<getpid()<<endl;
    //     cout<<"read: ";
    //     int tmp=0;
    //     //fscanf(fp,"%s%d",s1,&tmp);
    //     fscanf(fp,"%s",s1);
    //     cout<<s1<<endl;
    //     cout<<"write:hello, I am father process"<<i<<endl<<endl;
    //     fprintf(fp,"%s%d",s2,i);
    //     fflush(fp);
    //     sleep(2);
    //     ++i;
    // }

    // int fd[2];
    // if(pipe(fd))
    // {
    //     perror("pipe error");
    //     return 0;
    // }
    // pid_t pid=fork();
    // if(pid<0)
    // {
    //     perror("pipe error");
    //     return 0;
    // }
    // if(0==pid)
    // {
    //     char s[60];
    //     int i=5;
    //     while(i--)
    //     {
    //         read(fd[0],s,50);
    //         cout<<"child process "<<getpid()<<" "<<s<<endl<<endl;
    //         sleep(1);
    //     }
    // }

    // char s[60]="hello i am father process!!!";
    // int i=5;
    // while(i--)
    // {
    //     s[27]=i+'0';
    //     write(fd[1],s,30);
    //     sleep(1);
    // }

    if(mkfifo("corres.txt",0664))
    {
        perror("mkfifo");
    }
    pid_t pid=fork();
    if(pid<0)
    {
        perror("fork");
        return 0;
    }
    if(0==pid)
    {
        int fid=open("corres.txt",O_RDONLY);
        if(fid<0)
        {
            perror("open");
            return 0;
        }
        char s[60];
        int i=5;
        while(i--)
        {
            read(fid,s,50);
            cout<<"child process "<<getpid()<<" "<<s<<endl<<endl;
            sleep(1);
        }

        return 0;
    }

    int fid=open("corres.txt",O_WRONLY);
    if(fid<0)
    {
        perror("open");
        return 0;
    }
    char s[60]="hello i am father process!!!";
    int i=5;
    while(i--)
    {
        s[27]=i+'0';
        write(fid,s,30);
        sleep(1);
    }
    unlink("corres.txt");
    return 0;
}
